package com.web.config;

import java.util.Date;
import java.util.Map;

import cn.hutool.core.date.DateUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import cn.hutool.jwt.JWTValidator;
import cn.hutool.jwt.signers.JWTSignerUtil;


public class JWTConfig {
	//随机生成密钥
	private static final byte[] SIGNER ="sfsfsfss111".getBytes();
	//前端携带请求头的名字
	public static final String AUTH_HEAD_NAME = "Authorization";
	//作者id参数名字
	public static final String AUTHOR_ID ="userId";
	//JWT令牌的持续时间
	private static final int DURATION = 7;
	
	
	
	
	public static String gen(Map<String,Object> payloadMap) {
		//生效时间，使用当前时间
		Date noteBefore = new Date();
		//失效时间，使用当前时间+7
		Date expiresAt = DateUtil.offsetDay(noteBefore, DURATION);
		//声明创建JWT
		JWT jwt =JWT.create();
		jwt.setNotBefore(noteBefore);//设置生成时间
		jwt.setExpiresAt(expiresAt);//设置过期时间
		//在payload存放用户信息
		//把用户信息以及键值对的方法
		payloadMap.forEach((key,value)->{
			jwt.setPayload(key,value);
		});
		String token =jwt.setKey(SIGNER).sign();
		return token;
	}
	public static boolean validToken(String token) {
		boolean result =true;
		try {
			JWTValidator
			.of(token)
			.validateAlgorithm(JWTSignerUtil.hs256(SIGNER))
			.validateDate();
		}catch(Exception e){
			e.getStackTrace();
			result=false;
			
		}
		return result;
		
	}
	//jwt令牌解析用户id
	public static Integer getId(String token) {
		//jwt令牌字符转换成jwt对象，翻遍处理
		JWT jwt =JWTUtil.parseToken(token);
		//jwt令牌对象中获取某一个一载荷，获取一个叫做noteAuthorId的载荷
		Integer userId=(Integer)jwt.getPayload(AUTHOR_ID);
		return userId;
		
	}
}

